package issr.market.controller;

import issr.market.db.DBController;
import issr.market.db.impl.DBControllerImpl;
import issr.market.model.Lotto;
import issr.market.services.GestioneProdottiService;
import issr.market.utils.Constants;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.apache.struts2.rest.HttpHeaders;

@Results({ @Result(name = "accesso", type = "redirectAction", params = {
		"actionName", "accesso" }), 
		@Result(name = "login", type = "redirectAction", params = {
				"actionName", "login" })
})
public class MagazziniereController extends AbstractController {
	
	
	public static final String LOTTI_APPROVAZIONE = "approvazione";
	public static final String LOTTI_SCADUTI = "scaduti";
	
	private static final long serialVersionUID = 6099782011988611816L;
	
	private Logger logger = Logger.getLogger(MagazziniereController.class);
	
	private List<Lotto> lottiApprovazione; 
	private List<Lotto> lottiScaduti;
	
	private String nomeProdotto;
	private String codiceProdotto;
	private String codiceLotto;
	private String qProdotto;
	private String dataConsegna;
	private String dataScadenza;
	private String prezzo;
	
	private String[] idLotti;
	
	private List<Lotto> list;
	private List<Lotto> model = new ArrayList<Lotto>();
	
	
	//GET magazziniere/
	public HttpHeaders index(){
		
		if(accessForbidden())
			return new DefaultHttpHeaders("login")
				.disableCaching();
		
		
		
		lottiApprovazione = new ArrayList<Lotto>();
		lottiScaduti = new ArrayList<Lotto>();
		
		Map<String, List<Lotto>> lottiMap = initializeMagazziniereView();
		lottiApprovazione = lottiMap.get(LOTTI_APPROVAZIONE);
		lottiScaduti = lottiMap.get(LOTTI_SCADUTI);
		
		logger.info("Redirect to Magazziniere View Page");
		
		return super.index();
	}
	
	
	//POST magazziniere/
	public HttpHeaders create(){
		
		GestioneProdottiService.depositoProdotti(codiceLotto, codiceProdotto, dataConsegna, dataScadenza, qProdotto);
		return index();
	}
	
	
	//PUT magazziniere/1
	public HttpHeaders update(){
		GestioneProdottiService.approvaProdotti();
		return new DefaultHttpHeaders("accesso").disableCaching();
	}
	
	
	//DELETE magazziniere/1
	public HttpHeaders destroy(){
		GestioneProdottiService.eliminaLotti(idLotti);
		return new DefaultHttpHeaders("accesso").disableCaching();
	}
	
	
	public static Map<String, List<Lotto>> initializeMagazziniereView(){
		Map<String, List<Lotto>> lottiMap = new HashMap<String, List<Lotto>>();
		DBController dbController = new DBControllerImpl();
		
		lottiMap.put(LOTTI_APPROVAZIONE, dbController.getLottiByStato(Constants.LOTTO_INSERITO));
		lottiMap.put(LOTTI_SCADUTI, dbController.getLottiByStato(Constants.LOTTO_SCADUTO));
		
		return lottiMap;
	}

		
	public List<Lotto> getLottiApprovazione(){
		return lottiApprovazione;	
	}	
	
	public List<Lotto> getLottiScaduti(){
		return lottiScaduti;
	}

	public String getNomeProdotto() {
		return nomeProdotto;
	}

	public void setNomeProdotto(String nomeProdotto) {
		this.nomeProdotto = nomeProdotto;
	}

	public String getCodiceProdotto() {
		return codiceProdotto;
	}

	public void setCodiceProdotto(String codiceProdotto) {
		this.codiceProdotto = codiceProdotto;
	}

	public String getCodiceLotto() {
		return codiceLotto;
	}

	public void setCodiceLotto(String codiceLotto) {
		this.codiceLotto = codiceLotto;
	}

	public String getQProdotto() {
		return qProdotto;
	}

	public void setQProdotto(String qProdotto) {
		this.qProdotto = qProdotto;
	}

	public String getDataConsegna() {
		return dataConsegna;
	}

	public void setDataConsegna(String dataConsegna) {
		this.dataConsegna = dataConsegna;
	}

	public String getDataScadenza() {
		return dataScadenza;
	}

	public void setDataScadenza(String dataScadenza) {
		this.dataScadenza = dataScadenza;
	}

	public String getPrezzo() {
		return prezzo;
	}

	public void setPrezzo(String prezzo) {
		this.prezzo = prezzo;
	}

	public String[] getIdLotti() {
		return idLotti;
	}

	public void setIdLotti(String[] idLotti) {
		this.idLotti = idLotti;
	}	
	
	public Object getModel(){
		return (list!=null)?list:model;
	}

}
